{ "cells": [ { "cell_type": "markdown", "id": "1516fd72", "metadata": {}, "source": [ "# Parallelizing Multiple Grid Cells Locally" ] }, { "cell_type": "markdown", "id": "f8cd16d7", "metadata": {}, "source": [ "As users grow more familiar with MUSICA, they may wish to run simulations with a larger number of grid cells. By default, MUSICA executes on a single CPU core. This tutorial demonstrates how to use [Dask](https://docs.dask.org/en/stable/) to parallelize multiple grid cell simulations across multiple CPU cores. The solving of multiple grid cell simulations across multiple CPUs. It builds on the 1.multiple_grid_cells tutorial. Note that this tutorial serves as a proof-of-concept for local Dask usage as MUSICA is already efficient at solving a low number of grid cells without parallelization." ] }, { "cell_type": "markdown", "id": "8ca8eb3c", "metadata": {}, "source": [ "## 1. Importing Libraries" ] }, { "cell_type": "markdown", "id": "c71e018a", "metadata": {}, "source": [ "In addition to libraries previously used throughout MUSICA tutorials, this tutorial uses Dask. Note that if you'd like to visualize Dask graphs, you will also need [Graphviz](https://graphviz.org) installed." ] }, { "cell_type": "code", "execution_count": 2, "id": "75bab2f5", "metadata": {}, "outputs": [], "source": [ "import musica\n", "import musica.mechanism_configuration as mc\n", "import matplotlib.pyplot as plt\n", "import pandas as pd\n", "import numpy as np\n", "import dask\n", "from dask import delayed, compute\n", "from dask.distributed import Client, LocalCluster\n", "from scipy.stats import qmc\n", "import time\n", "\n", "pd.set_option('display.float_format', str) # This is done to make the arrays more readable\n", "np.set_printoptions(suppress=True) # This is done to make the arrays more readable" ] }, { "cell_type": "markdown", "id": "5e43b750", "metadata": {}, "source": [ "## 2. Creating a local cluster" ] }, { "cell_type": "markdown", "id": "304f861d", "metadata": {}, "source": [ "To run MUSICA in parallel locally, first create a Dask LocalCluster and connect a Client. You can adjust n_workers and threads_per_worker depending on your system and workload. Here we use 2 workers because we intend to simulate 2 grid cells in parallel—one per worker. Use the Dashboard link that prints below to visually track your performance." ] }, { "cell_type": "code", "execution_count": 3, "id": "061b7a33", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "
\n", "
\n", "

Client

\n", "

Client-a051be18-56a3-11f0-8c1e-6e865522305f

\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", "
Connection method: Cluster objectCluster type: distributed.LocalCluster
\n", " Dashboard: http://127.0.0.1:8787/status\n", "
\n", "\n", " \n", "\n", " \n", "
\n", "

Cluster Info

\n", "
\n", "
\n", "
\n", "
\n", "

LocalCluster

\n", "

af541be6

\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", "\n", " \n", "
\n", " Dashboard: http://127.0.0.1:8787/status\n", " \n", " Workers: 2\n", "
\n", " Total threads: 2\n", " \n", " Total memory: 32.00 GiB\n", "
Status: runningUsing processes: True
\n", "\n", "
\n", " \n", "

Scheduler Info

\n", "
\n", "\n", "
\n", "
\n", "
\n", "
\n", "

Scheduler

\n", "

Scheduler-9afc8fcd-5807-4865-b429-7c8596674bc0

\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
\n", " Comm: tcp://127.0.0.1:52483\n", " \n", " Workers: 0 \n", "
\n", " Dashboard: http://127.0.0.1:8787/status\n", " \n", " Total threads: 0\n", "
\n", " Started: Just now\n", " \n", " Total memory: 0 B\n", "
\n", "
\n", "
\n", "\n", "
\n", " \n", "

Workers

\n", "
\n", "\n", " \n", "
\n", "
\n", "
\n", "
\n", " \n", "

Worker: 0

\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", "\n", " \n", "\n", "
\n", " Comm: tcp://127.0.0.1:52490\n", " \n", " Total threads: 1\n", "
\n", " Dashboard: http://127.0.0.1:52493/status\n", " \n", " Memory: 16.00 GiB\n", "
\n", " Nanny: tcp://127.0.0.1:52486\n", "
\n", " Local directory: /var/folders/3_/65138rls3r5c93lzl9dhrb980000gp/T/dask-scratch-space/worker-gkx0pv41\n", "
\n", "
\n", "
\n", "
\n", " \n", "
\n", "
\n", "
\n", "
\n", " \n", "

Worker: 1

\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", "\n", " \n", "\n", "
\n", " Comm: tcp://127.0.0.1:52491\n", " \n", " Total threads: 1\n", "
\n", " Dashboard: http://127.0.0.1:52492/status\n", " \n", " Memory: 16.00 GiB\n", "
\n", " Nanny: tcp://127.0.0.1:52488\n", "
\n", " Local directory: /var/folders/3_/65138rls3r5c93lzl9dhrb980000gp/T/dask-scratch-space/worker-tcn0y8e9\n", "
\n", "
\n", "
\n", "
\n", " \n", "\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", "
\n", " \n", "\n", "
\n", "
" ], "text/plain": [ "" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cluster = LocalCluster(\n", " n_workers=2,\n", " threads_per_worker=1\n", ")\n", "client=Client(cluster)\n", "client" ] }, { "cell_type": "markdown", "id": "a6c183c5", "metadata": {}, "source": [ "## 3. Setting up Grid Cells " ] }, { "cell_type": "markdown", "id": "8548cbd7", "metadata": {}, "source": [ "Due to the nature of Dask's [lazy evaluation](https://docs.dask.org/en/stable/user-interfaces.html?highlight=lazy#laziness-and-computing) model and its requirement that all objects passed between workers must be picklable, this tutorial follows a slightly different order than 1.multiple_grid_cells.ipynb. In particular, MUSICA components such as the solver, state, and chemical mechanism must be defined within a dask.delayed function defined later in the notebook.By instantiating them inside the delayed function, we ensure that each Dask worker constructs and uses its own local version, avoiding pickling issues and enabling clean, parallel execution." ] }, { "cell_type": "code", "execution_count": 4, "id": "1f954a89", "metadata": {}, "outputs": [], "source": [ "num_grid_cells = 2" ] }, { "cell_type": "markdown", "id": "50bd7488", "metadata": {}, "source": [ "To prepare inputs for multiple grid cells, we create a NumPy array with repeated values for temperature, pressure, and species concentrations. Each row represents a distinct grid cell, and the columns represent the physical and chemical variables.\n", "\n", "This array is then split into separate variables to initialize the solver's state. Concentrations are formatted as a dictionary, as required by set_concentrations(), and additional simulation metadata (e.g., time step, simulation length) is initialized. These steps closely follow the logic in steps 5 and 6 of the [Multiple Grid Cells Tutorial](1.%20multiple_grid_cells.ipynb)." ] }, { "cell_type": "code", "execution_count": 5, "id": "c2dde2d3", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 300. , 101253.3, 5. , 5. , 5. ],\n", " [ 300. , 101253.3, 5. , 5. , 5. ]])" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "box_model_values = [[300, 101253.3, 5, 5, 5]]\n", "box_model_values = np.repeat(box_model_values, num_grid_cells, axis = 0)\n", "display(box_model_values)" ] }, { "cell_type": "code", "execution_count": 6, "id": "0be57cb5", "metadata": {}, "outputs": [], "source": [ "temperatures = box_model_values[:, 0]\n", "pressures = box_model_values[:, 1]\n", "concentrations = {\n", " \"A\": [],\n", " \"B\": [],\n", " \"C\": []\n", "}\n", "concentrations[\"A\"] = box_model_values[:, 2]\n", "concentrations[\"B\"] = box_model_values[:, 3]\n", "concentrations[\"C\"] = box_model_values[:, 4]\n", "\n", "concentrations_solved = []\n", "time_step_length = 1\n", "sim_length = 60\n", "curr_time = 0" ] }, { "cell_type": "markdown", "id": "80be8c3b", "metadata": {}, "source": [ "## 4. Creating a delayed function for Dask" ] }, { "cell_type": "markdown", "id": "8b4b3bef", "metadata": {}, "source": [ "We define a @delayed function that sets up the Species, Reactions, Mechanism, and Solver for a single grid cell. The function returns the concentrations at each time step. This function also mirrors steps from the [Multiple Grid Cells Tutorial](1.%20multiple_grid_cells.ipynb), but is structured for Dask compatibility." ] }, { "cell_type": "code", "execution_count": null, "id": "aebe08f9", "metadata": {}, "outputs": [], "source": [ "@delayed\n", "def solve_one_cell(cell_index,temperatures,pressures,concentrations, sim_length, time_step):\n", "\n", " # Define the system\n", "\n", " A = mc.Species(name=\"A\") # Create each of the species with their respective names\n", " B = mc.Species(name=\"B\")\n", " C = mc.Species(name=\"C\")\n", " species = [A, B, C] # Bundle the species into a list\n", " gas = mc.Phase(name=\"gas\", species=species) # Create a gas phase object containing the species\n", "\n", " r1 = mc.Arrhenius( # Create the reactions with their name, constants, reactants, products, and phase\n", " name=\"A_to_B\",\n", " A=4.0e-3, # Pre-exponential factor\n", " C=50, # Activation energy (units assumed to be K)\n", " reactants=[A],\n", " products=[B],\n", " gas_phase=gas\n", " )\n", "\n", " r2 = mc.Arrhenius(\n", " name=\"B_to_C\",\n", " A=4.0e-3,\n", " C=50, \n", " reactants=[B],\n", " products=[C],\n", " gas_phase=gas\n", " )\n", "\n", " mechanism = mc.Mechanism( # Define the mechanism which contains a name, the species, the phases, and reactions\n", " name=\"musica_micm_example\",\n", " species=species,\n", " phases=[gas],\n", " reactions=[r1, r2]\n", ")\n", "\n", "\n", " #create the solver\n", " solver = musica.MICM(mechanism=mechanism, solver_type=musica.SolverType.rosenbrock_standard_order)\n", "\n", " #create the state\n", " state = solver.create_state(1)\n", " state.set_conditions(temperatures[cell_index],pressures[cell_index])\n", " cur_concentrations = {key: value[cell_index] for key, value in concentrations.items()}\n", " state.set_concentrations(cur_concentrations)\n", "\n", " time = 0.0\n", " result = []\n", " track_time = []\n", " while time <= sim_length:\n", " solver.solve(state, time)\n", " result.append(state.get_concentrations().copy())\n", " track_time.append(time)\n", " time += time_step\n", "\n", " return {\n", " \"times\": np.array(track_time),\n", " \"concentrations\": np.stack(result)\n", " }\n" ] }, { "cell_type": "markdown", "id": "a54ad76d", "metadata": {}, "source": [ "## 5. Solving" ] }, { "cell_type": "markdown", "id": "41cc2cf9", "metadata": {}, "source": [ "We use a Python list comprehension to create one delayed task per grid cell. Each call to solve_one_cell(...) returns a Dask Delayed object, which represents a unit of work that hasn’t been executed yet. These tasks are stored in the tasks list and will be executed in parallel when we call compute()." ] }, { "cell_type": "code", "execution_count": 34, "id": "811d3c5a", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZAAAAEhCAYAAABRKfYcAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nO3deVhUZf8/8PfMMOwiCLijgFEigiuggGnuKGZqLpmW+k0tUytLbVOfxzLN9AmrJ3tEyy011FQ0BHeUxQVUwBVUUERFQZFNBmbm8/vDC36RIDDMzD0Dn9d1cXU1c+bcb5bb95xlzpEQEYExxhirnWNS0QkYY4wZJy4QxhhjGuECYYwxphET0QH0qaioCPv27RMdw+D1798fTZo0ER2DGZCrV68iMTFRdAyDZmVlhaFDh4qOoVeShnQQPT09HS4uLqJjGLxTp07Bx8dHdAxmQJYvX4758+eLjmHQ2rZti/T0dNEx9KlhHkQ/deoUiIi//vGVlpYm+lfDDFjbtm2F/40a6te3334r+tcjRIMsEMYYY3XHBcIYY0wjXCCMMcY0wgXCGGNMI1wgjDHGNMIFwhhjTCNcIIwxxjTCBcIYY0wjXCCMMcY0wgXCGGNMI1wgjDHGNMIFwhhjTCNcIIwxxjTCBcIYY0wjXCCMMcY0wgXCGGNMI1wgjDHGNMIFwhhjTCNcIIwxxjTCBcIYY0wjXCCMMcY0wgXCGGNMI1wgjDHGNMIFwhhjTCNcIIwxxjTCBcIYY0wjXCCMMcY0wgXCGGNMI1wgjDHGNMIFwhhjTCNcIIwxxjTCBcIYY0wjXCCMMcY0wgXCGGNMI1wgjDHGNMIFwhhjTCNcIIwxxjTCBcIYY0wjXCCMMcY0wgXCGGNMI1wgjDHGNMIFwhhjTCNcIIwxxjTCBcIYY0wjXCCMMcY0YiI6gAiHDx9Genq66BgG58GDB6IjMANWVFSE0NBQ0TEMUlJSkugIQjTIAvn8889FR2DM6Dx48ABjx44VHcNgtW3bVnQEvZMQEYkO0ZD17t0bhw8fholJg+xyxjSSmJiI1atX45dffhEdpSE7xsdABDp79iyOHz+OQ4cOiY7CmFHZtm0bQkNDUVpaKjpKg8YFItCWLVsq/JcxVj0iwsaNG/Ho0SMcOHBAdJwGjQtEELVajc2bNwMAdu7ciSdPnghOxJhxiI2NxZ07dyCVSvH777+LjtOgcYEIcvz4cWRlZQEAiouL8ddffwlOxJhx2LJlC+RyOdRqNXbt2oWCggLRkRosLhBBtm7dClNTUwCAVCot3xphjFVNqVRi27Zt5cc+SkpKsG/fPsGpGi4uEAFKS0uxbds2lJSUAHg6KcLDw5Gbmys4GWOG7dChQ3j48GH5/0skEn7zJRAXiACRkZHIy8ur8FjZ5jhjrGplu6/KqFQqREREICcnR2CqhosLRIDff/+9wiQos2nTJgFpGDMOxcXF+PPPPys9dffPP/8UkIhxgehZUVERdu/e/cwkUKlUiIqKwr179wQlY8yw7d27F0VFRc88XnZaL9M/LhA927NnDxQKRaXPSaVSbN++Xc+JGDMOmzdvhkwme+ZxtVqNmJgYZGZmCkjVsHGB6NnmzZshlVb+Y1epVPxOirFK5OXlISIiAkqlstLnTUxM8Mcff+g5FeMC0aOyT86qVKpKnycixMfH49q1a3pOxphh27FjR5XzBnh6JuOGDRv0mIgBXCB6tX37dqjV6ucuI5fL+ZLZjP1DdSeYEBGSkpKQkpKip0QM4ALRqy1btoCIIJfLIZfLYWJiAqlUChMTk/LHlEoln9fO2N9kZWXh+PHjFeaOTCaDVCqtMJeApx/QZfrD1xDXEyLChAkTMH78+PLHcnJy8Pnnn2P+/PlwdnausLxCoYCZmZmeUzJmeIqKirB69eoKj0VGRiIqKgrffPNNhcdbtmypz2gNHt8PRKD09HS4uLjg1KlT8PHxER2HMaOxfPlyrF69GmlpaaKjNGR8PxDGGGOa4QJhjDGmES4QxhhjGuECYYwxphEuEMYYYxrhAmGMMaYRLhDGGGMa4QJhjDGmES4QxhhjGuECYYwxphEuEMYYYxrhAmGMMaYRLhDGGGMa4QJhjDGmES4QxhhjGuECYYwxphEuEMYYYxrhAmGMMaYRLhDGGGMa4QJhjDGmES4QxhhjGuECYYwxphEuEMYYYxrhAmGMMaYRLhDGGGMa4QJhjDGmES4QxhhjGuECYYwxphEuEMYYYxoxER2gISgsLEROTg5ycnJQUFAAhUIBAEhNTQUAHD58GHl5eQAAuVyORo0awd7eHvb29rC2thaWmzHRHj58iOzsbOTn5yM3NxdEBKVSiaSkJBQWFmLPnj2wsrICAFhZWcHa2rp87piZmQlOX/9JiIhEhzB2d+/exYULF3D9+nWkp6eXf92+fRs5OTkoLi7WeN1mZmawt7dHq1at4OzsXP7l6uqKjh07onXr1lr8ThjTH5VKhdTUVFy6dKl8zqSlpSEtLQ33799HTk4O1Gq1xuu3trZG06ZN4eTkBGdnZ7i4uMDZ2Rlubm7o2LEjbGxstPjdNEjHuEBq6ebNm4iJiUF8fDySkpKQmJiI7OxsAEDjxo0r/KG2adOm/N2Qg4MD7O3tYWNjA7lcXr68VCoFESE3NxfA00n1+PHj8i2W7Oxs5OTkICMjo0I5PXz4EADQpEkTeHl5wdPTE927d4efnx9eeOEFMT8cxqqgVCqRmJiI2NhYnD9/HomJibh48SKKi4shkUjQokWL8nnj7OyMFi1awN7eHo6OjnBwcICNjQ1sbW0BACYmJmjUqBEAoKSkBIWFhQCAJ0+eVJg7OTk5yMrKwq1bt8rL6ebNm+VjOjs7w8vLC15eXvD19UXPnj3RpEkTYT8jI8QFUp3U1FRERETgxIkTiI2NRWZmJuRyOTp16oROnTrB09MTnp6e8PLygoODg95yPXr0CElJSUhOTkZSUlJ5mRUXF6NZs2bw8/NDr169MHDgQHh4eOgtF2PA08KIjY3FoUOHEB0djdOnT6OwsBBNmjRB165dy9/0eHp6wsPDA+bm5nrLlpaWhuTk5PK5k5iYiJSUFACAu7s7/Pz80KdPHwwcOBCOjo56y2WEuED+qbi4GIcPH8b+/fsRERGB69evw9bWFr169YKfnx/8/f3RvXt3WFhYiI76DIVCgYSEBMTGxiImJgbR0dHIzs5GmzZtMHjwYAwePBiDBg2CpaWl6KisHrp37x727duHiIgIHDp0CI8fP8YLL7yAgIAA+Pv7w8/PD+7u7pBIJKKjPiMnJwexsbHlc+fUqVNQKpXo1q0bAgMDMWTIEPj4+BhkdoG4QICnu43i4uKwadMm/PHHH3j8+DE6dOiAYcOGoX///nj55ZdhamoqOmatqdVqnDt3DocOHcKhQ4dw7NgxyOVy9OvXD6NHj8aoUaPKD0AypomHDx9i37592L59OyIiIiCXy+Hv74/+/ftj2LBh6NChg+iIGikqKkJsbCz27t2LPXv24ObNm3BycsKIESMwevRo+Pv7c5kAx0ANWEJCAk2fPp3s7OxIIpGQn58fBQcH0+3bt0VH04msrCz6+eefqU+fPiSVSqlRo0Y0efJkio2NFR2NGRGFQkHbt2+nQYMGkUwmIysrKxo7dizt3LmTioqKRMfTifPnz9Pnn39O7dq1IwDk6upKixcvrrf/VtTQ0QZXIHl5efTLL79Qt27dCAB16NCBVqxYQbdu3RIdTa/u3LlDq1atos6dOxMA6tixI61atYoePnwoOhozUCkpKTRv3jxq2rQpyWQyGjp0KIWGhlJhYaHoaHoVHx9Pc+bMIUdHR5LJZDRs2DAKCwsjpVIpOpq+NZwCuXv3Li1atIjs7OzIzMyMRo8eTQcPHiS1Wi06mnDx8fE0e/ZssrOzI3Nzc5o4cSJdvnxZdCxmIE6cOEGjR48mmUxGLVu2pPnz51NaWproWMIpFAoKDQ2loKAgkslk5OLiQsuWLaPc3FzR0fSl/hfI+fPnafz48SSXy6lVq1a0bNkyfpddhby8PAoODiYXFxeSyWQ0atQoOnXqlOhYTACVSkXbtm2j7t27EwDy9/enP//8syG+y66RlJQUmjFjBllaWlKTJk3os88+o6ysLNGxdK3+FsiFCxfo9ddfJ4lEQp06daINGzaQQqEQHcsoKJVK+uOPP8jb25sAUFBQEJ09e1Z0LKYHarWatm/fTh4eHiSTyWj06NF08uRJ0bGMRnZ2Nn311VfUrFkzsrKyok8//ZSys7NFx9KV+lcgqamp9Oabb5JUKiVPT0/6888/eTdVHYSHh5O3tzdJJBIaNWoUXbx4UXQkpiN79+6lzp07k1QqpbFjx/JuzDooLCyk7777jhwdHcnGxoYWLlxIjx8/Fh1L2+pPgeTm5tLcuXPJ1NSU2rdvT1u3biWVSiU6Vr2gVqtp9+7d1KlTJzIxMaGZM2fW53dVDU5SUhL169ePJBIJjRgxgpKSkkRHqjfy8/NpyZIlZGdnR82bN6e1a9fWp3+XjL9AVCoVrVmzhpo2bUr29vb0448/UmlpqehY9ZJKpaJ169ZR8+bNqUmTJrRq1SoqKSkRHYtp6MGDB/Tee++RTCaj7t27U3R0tOhI9VZOTg7NnDmTTExMqGvXrhQVFSU6kjYYd4EkJydTjx49yMTEhKZNm0b3798XHalBKCgooEWLFpG5uTl5enrygXYjFBoaSg4ODtSiRQv63//+xwfH9eTKlSs0dOhQAkCjR4+mBw8eiI5UF8ZZIMXFxbRw4UIyNTWlHj16UHJysuhIDVJKSgr16dOHZDIZzZkzp8F9HsAYpaWl0aBBg0gqldLMmTMpLy9PdKQGaefOndSiRQtq1qwZ/fHHH6LjaMr4CiQ+Pp46dOhA1tbWFBwcXJ/2JxoltVpNISEhZGtrS66urnTixAnRkVgl1Go1/fzzz2RtbU0dOnSgmJgY0ZEavEePHtE777xDEomEhg8fbox7UIynQFQqFS1btoxMTU2pb9++lJ6eLjoS+5s7d+7QsGHDSCaT0ZdffsnHoQxIVlZW+YfdvvjiCyouLhYdif3NkSNHqG3bttS8eXPav3+/6Di1YRwFcuvWLerTpw+ZmprS8uXLeavDQJW9y7W0tCQfHx9KTU0VHanBCw8Pp2bNmpGzszNvHRqw3NxcGj9+PEkkEpo9ezY9efJEdKSaMPwCOXr0KDVt2pTat29PCQkJouOwGrh8+TJ17dqVGjVqRDt27BAdp0FSq9W0bNkykkqlNHr0aL76gpEIDQ0lOzs76ty5M924cUN0nOoYboGUTQCZTEbjxo2jgoIC0ZFYLRQXF9Ps2bNJIpHQ/Pnz+SwfPcrOzqZBgwaRmZkZrVmzRnQcVkupqank5eVF9vb2FBERITrO8xhmgeTn59OIESPIxMSEvv/+e9FxWB2EhISQmZkZDRw4kN8F68G5c+fI2dmZnJyc6PTp06LjMA0VFBTQG2+8QTKZjJYuXSo6TlUMr0AyMzOpa9eu5OjoSMeOHRMdh2nB6dOnqXXr1uTu7m4Mm+VGKzw8nBo1akR9+vQxxjN6WCX+85//kEwmoylTphjih3aPSkXezuqfLly4gJ49eyIvLw/R0dHo3bu36EhMC7y9vXH69GlYWlrC29sbMTExoiPVO+vWrcPw4cMxcuRIREZG8r2864mPPvoI4eHh2LFjBwIDA5Gbmys6UgUGUyBHjhyBv78/XFxccOrUKbz44ouiIzEtatGiBY4dOwZfX18MHDgQYWFhoiPVC0SETz/9FFOnTsWCBQvw22+/GeXtl1nVBg4ciGPHjuHy5cvo1asXMjMzRUf6/0RvAxER7du3j8zNzWncuHF8jno9V1paSlOnTiW5XE5btmwRHceoqVQqeu+998jExIQ2btwoOg7TsVu3blGHDh3IxcXFUHYFiz8GsmfPHjIzM6MJEybwmToNhFqtpo8//pikUimFhISIjmOUlEolTZ48mUxNTWnnzp2i4zA9efjwIfn4+FDz5s0N4RJOYgtk8+bNJJPJaPbs2XzPjgZo4cKFJJFI6McffxQdxaiUlpbSmDFjyNLS0tBP82Q68OjRI+rZsyc1bdpU9KX3xRXI9u3bSSaT0bx580RFYAZg6dKlJJFIeEukhlQqFU2YMIGsrKz4LMUGLD8/n3r37k3NmjWjq1evioohpkAiIyPJzMyMZs6cKWJ4ZmAWLVpEUqmUfv/9d9FRDJparaZ3332XTE1NKTw8XHQcJlhBQQEFBARQ69atRR0T0X+BHD58mMzNzemdd97h3Vas3Mcff0wmJia0e/du0VEM1ocffkhyuZzCwsJER2EG4uHDh9SpUydq164d3blzR9/D67dAkpKSyMbGhsaNG8cXRGQVqNVqmj59OllYWFBcXJzoOAZnxYoVJJVKadu2baKjMAOTlZVFL730EnXt2pXy8/P1OfRRCRGRPk4Xvnv3Lnr06IG2bdvi4MGDMDMz08ewzIioVCqMGjUKMTExiI2NhZubm+hIBmHnzp0YM2YMVqxYgY8++kh0HGaA0tLS0LNnT3Tt2hVhYWEwMTHRx7DH9FIgRUVFeOWVV5CTk4OTJ0/CwcFB10MyI/X3v5W4uLgG/4nqM2fOoE+fPnjzzTexZs0a0XGYAYuPj0efPn0wfvx4ff2tHNP5J9GJCBMmTEB6ejoOHDjA5cGey9LSErt27UJpaSneeOMNqFQq0ZGEyczMxLBhw/DKK69g9erVouMwA9e9e3ds3LgR69atw3//+1+9jKnzAlm2bBn27t2L0NBQuLq66no4Vg+0bNkSYWFhiIuLw+effy46jhClpaUYN24cGjdujN9//x0ymUx0JGYERo4ciUWLFuGjjz7CiRMndD+gLo+wHDp0iGQyGV+SnWlk06ZNJJFIKDQ0VHQUvXv33XfJ2tqaLly4IDoKMzJqtZpGjBhBzZs3p8zMTF0OpbuD6BkZGejatSsGDBiALVu26GII1gDMmDEDmzdvxpkzZ/DSSy+JjqMXGzduxKRJk7B9+3aMGjVKdBxmhHJzc+Ht7Y2WLVviyJEjutqC1c1BdLVajX79+iErKwtnzpyBlZWVtodgDURJSQn8/f1BRIiNja33V5q9du0aunTpgunTp2PFihWi4zAjlpSUBF9fX3z++edYsGCBLobQzUH05cuXIyYmBhs2bODyYHViamqKbdu2ISUlBQsXLhQdR6eUSiUmTpwIZ2dnfP3116LjMCPn5eWFpUuXYvHixYiLi9PNINreKZaQkECmpqb03XffaXvVrAELCQkhqVRKhw8fFh1FZxYsWEDm5uaiL5DH6hG1Wk1Dhw4lV1dXevz4sbZXr91jIAqFAl26dEGLFi1w8OBBSKUGc78qVg+MGjUK8fHxuHDhAho1aiQ6jladPn0afn5++OGHHzBjxgzRcVg9cu/ePXh5eeG1117T9udDtHsMZOHChVi5ciWSk5P5lF2mddnZ2ejQoQPGjRuHH374QXQcrVEqlfDx8UHjxo1x5MgRSCQS0ZFYPbNt2zaMHz8eBw8eRL9+/bS12mNa24WVlJREpqamFBwcrK1VMvaM9evXk1QqpejoaNFRtOarr74iCwsLSk1NFR2F1WPDhw8nNzc3Kioq0tYqtbMLS6VSwd/fHwAQExPDH3piOjVw4EDcuXMHZ8+eNfqzsq5cuYLOnTtj8eLFmDdvnug4rB7LyMiAh4cHZs2ahSVLlmhjldo5C+vXX3/F2bNnsXbtWi4PpnO//PILbty4US92Y82ePRsdOnTAnDlzREdh9ZyTkxOWLFmCFStWIDU1VSvrrPMWSH5+Pl588UWMHTsWwcHBWgnFWHUWLlyI4OBgpKSkoHnz5qLjaCQsLAzDhw9HVFQUXn75ZdFxWAOgUqnQpUsXODs7IywsrK6rq/tB9Llz5+LXX39FSkoK7O3t6xqIsRp58uQJ2rdvj0GDBhnlVWpLSkrg6emJLl26YNu2baLjsAbkyJEj6NevHyIiIjBo0KC6rKpuBXL9+nV06NAB//nPf/D+++/XJQhjtbZ582ZMmjQJ8fHx6Ny5s+g4tfL999/jiy++wOXLl9G2bVvRcVgDM3z4cFy/fh2JiYl1OexQtwKZMGECEhISkJycrK8bmDBWjojg6+uLpk2bYt++faLj1Fh+fj5cXV0xdepUfPPNN6LjsAYoNTUVHTp0QEhICCZNmqTpajQ/iH7p0iVs3boV//73v7k8mBASiQSLFy/GX3/9hZMnT4qOU2PBwcEoLS3FJ598IjoKa6Dc3Nzw1ltv4d///jdKSko0Xo/GWyCjR4/GlStXkJiYyJ84Z0L17t0bZmZmOHDggOgo1crNzYWrqys+/PDDen9tL2bYbt68iZdeegk//PADpk2bpskqNNsCSUxMxM6dO7F48WIuDybcv/71Lxw8eBDHjx8XHaVaK1euhEQiwYcffig6Cmvg2rZtiylTpuDrr7+GQqHQaB0abYFMmDABFy5cwLlz5/iyC8wg9O7dG9bW1vjrr79ER6lSYWEhnJyc8NFHH+nq8tqM1crt27fRrl07/O9//9PkWEjtt0Bu376N0NBQfPzxx1wezGB88skn2L9/Py5evCg6SpXWrVsHhUKB9957T3QUxgAArVu3xrhx47By5UpocjSj1gUSHByMpk2bYuzYsbUejDFdCQoKgru7O77//nvRUSqlUqnwww8/YPLkyXBwcBAdh7Fyn3zyCS5evIjIyMhav7ZWBZKfn4+1a9di1qxZRn8NIla/lB1X2Lx5M+7duyc6zjP27NmDtLQ0fPDBB6KjMFaBp6cnBgwYgJUrV9b6tbUqkC1btqCkpETTI/aM6dTEiRNhbW2N3377TXSUZ/z8888YOnQo3NzcREdh7BkffPABDh8+jJSUlFq9rlYFsmbNGowZMwZ2dna1GoQxfTA3N8fEiRMREhICtVotOk65Gzdu4OjRo/zGixmswYMHo02bNli3bl2tXlfjAklMTMTZs2cxderUWodjTF+mTZuGtLQ0HD16VHSUciEhIWjZsiUCAwNFR2GsUlKpFJMmTcKGDRtQWlpa89fVdMHVq1ejQ4cO5ff9YMwQubu7w8/PDyEhIaKjAABKS0uxfv16TJkyhW91wAza//3f/yE7O7tWV+mtUYGUlJQgNDQUU6ZM0TgcY/oyZcoU7NmzB3l5eaKj4ODBg8jKysLkyZNFR2HsuZycnNC/f39s2rSpxq+pUYFERkYiNzcXo0eP1jgcY/oyatQoqNVqbdzvoM7++OMP9OzZE87OzqKjMFatsWPHIiIiAo8fP67R8jUqkNDQUPj5+aFNmzZ1CseYPtja2qJ///4IDQ0VmkOhUGDPnj0YM2aM0ByM1dSIESMAoMZvvqotEIVCgb179/IkYEZlzJgxiIyMxKNHj4RliIiIQH5+Pl5//XVhGRirDVtbWwwYMKDGb76qLZBDhw4hLy8Po0aNqnM4xvRl+PDhAIDw8HBhGXbt2oWePXuiVatWwjIwVlujR4/GgQMHkJ+fX+2y1RbI/v370aVLF54EzKjY2trC398fERERQsYnIhw4cABBQUFCxmdMU0OGDIFSqcSRI0eqXbbaAomIiODz15lRCgwMREREhJAPFZ47dw53797lucOMjoODA7p161ajN1/PLZCUlBRcv34dgwcP1lo4xvQlMDAQ2dnZSEhI0PvY+/fvR/PmzeHl5aX3sRmrq8DAwBrdGuG5BRIZGQlbW1v06NFDa8EY05eOHTvCyclJyG6syMhIBAYG8i0PmFEKDAxERkYGrly58tzlnlsgx48fR69evfie58xo9enTBydOnNDrmAqFAmfOnMErr7yi13EZ0xZvb280atSo2rt8PrdA4uLi+NIlzKj5+/sjLi4OSqVSb2PGx8ejuLiY5w4zWjKZDD4+PoiJiXnuclUWSHp6OjIzM+Hn56f1cIzpi7+/PwoKCpCcnKy3MWNjY9GsWTO4urrqbUzGtC0gIEDzAomJiYFcLke3bt20HowxffHw8ECTJk0QHR2ttzFjYmJ464MZPX9/f1y/fh13796tcpkqCyQhIQGdOnWCpaWlTsIxpg8SiQTe3t6Ij4/X25gJCQnw9fXV23iM6YKPjw8kEslz506VBZKYmIhOnTrpJBhj+uTl5YWkpCS9jPXw4UPcvn2b5w4zeo0bN0bbtm2fu/u3ygJJTk6Gp6enToIxpk+enp64fPlyrW6Uo6nExMTyMRkzdp6enrUvkDt37uDBgwf8IShWL3h6ekKhUCA1NVXnYyUlJcHe3h4tW7bU+ViM6Zqnp+dzt94rLZCLFy8CePpBLMaMnbu7O0xMTHDhwgWdj3Xx4kXe+mD1hqenJ1JSUlBSUlLp85UWyPXr19G4cWM4OjrqNBxj+mBmZobWrVvjxo0bOh/r+vXrcHNz0/k4jOnDCy+8AKVSiYyMjEqfr7RA0tPT4eLiotNgjOmTi4sL0tLSdD5Oeno6332Q1RtlPVDV3OECYQ2CPgpEpVIhIyODC4TVG/b29mjUqFHtCiQtLY0nAatXnJ2ddV4gmZmZKC0t5bnD6pXnzZ1KCyQzMxOtW7fWaSjG9KlNmza4ffu2TsfIzMwEADg5Oel0HMb06Xlzp9ICycnJ4QPorF5xcHBAcXExCgsLdTbGgwcPysdirL5wdHRETk5Opc89UyAFBQUoLi7mScDqlbK/56omgjbk5OTAysoKFhYWOhuDMX2zt7dHdnZ2pc89UyBlE8ze3l63qfQoPDwc27ZtEx2jwfjnz9sQfv5lf8+6LpD69MbLEH5vDYkhzhvg6dypct7QPyQkJBAAunbt2j+fMlq9e/em1q1bi47RYPzz520IP/9Hjx4RADpw4IDOxvjss8+oS5cuOlu/vhnC760hMcR5Q0S0Zs0asrW1reypo89sgZTtI7aystJhpzGmX2V/z0VFRTobo7CwENbW1jpbP2MiWFlZVXns8JkCKfvIuqmpqW5T6YBarRYdocYMOSsRgYhEx9AquVwOiUQChUKhszFKSkp43uiYIWetj/MGeNoFpaWllX5vBlsgxcXFWLRoEdq1awczMzO4ublh+vTpyM/Pr7Dc5cuXMWTIEDg6OsLKygre3t7YuXNnleudNWsWevXqVelNUqZNm3LCmGUAACAASURBVIaBAweW/wxyc3MxY8YMdOzYEc2bN8fIkSMRHh6u8fdUk6xTp07FzJkzcefOHYwfPx5t27ZFu3btMGXKlGfeBWg7X2JiIvr37w9bW1tYWlrC19cX+/fv1+mY+mRqalrlNX20QaFQ8LwBz5v6Nm/MzMwAoPK588+dWrt27SIApFAodLpfrTqTJ08mmUxGkyZNolWrVtHs2bPJwsKCevbsWb7MiRMnyMrKipydnemLL76gr7/+mnx9fQkALV68uHy5v+9LDA4OJgD0008/VRgvMzOTpFIpjR07loiIMjIyyNnZmaysrOi9996jTz/9lLp06UJSqZS+//77Wn8/Nc3avXt3cnZ2platWlFAQADNmzePevfuTQBo5MiR5ctpO9/Ro0fJ3NycWrVqRR999BFNmTKFGjduTCYmJhQTE1OrMQ11X66NjQ2tXbtWZ+t/8803afjw4Tpbf03wvOF5o20REREEgB4/fvzPp44+UyDbt28nAKRSqfSTrhLFxcUkl8vp1VdfrfD4qlWrCABdvXqV1Go1de3alZo0aUKZmZnly5SUlFDfvn3J1NSUrl69SkQVfxH3798nExMT6tOnT4V1f//99wSAIiIiiOjpPwYA6OTJk+XLKBSK8nXn5OTU+PupTdbu3bsTAJo/fz6p1WoiIlKpVNS1a1dq3Lhx+Wu1mU+lUlGnTp2ocePGlJqaWv745cuXSSKR0JtvvlmrMQ11Itjb29PPP/+ss/WPGTOGRo0apbP1V4fnDc8bXThy5AgBoAcPHvzzqWcLpGwLpKSkRD/pKlFYWEhyuZxsbGzo7Nmz5Y+rVCoqKCggpVJJ8fHxBIBef/31Z16/cePGCu+W/vmLGDZsGMlkMsrKyip/zNfXl1q1akUqlYpycnJIIpGQt7f3M+veunUrAaCQkJAafz+1ydq9e3eysLCgJ0+eVFhu1qxZBIAyMjJ0lu/tt99+5rkff/yRVq1aVasxDXUi2NjY1OrnUlvjx4+n1157TWfrrw7PG543uhAZGUkAKDc3959PHTX55y6tsn24JSUlkMvltd9hpgWWlpZYtGgRvvzyS3Tt2hXu7u545ZVXMGTIEAwaNAgymaz85kC9e/d+5vVdu3YFAKSkpFS6/rfffht79+7Frl27MH36dKSnp+PUqVP47LPPIJVKcfXqVRARCgoKMHbs2AqvzcvLA/D0st01VdusTZs2hbm5eYXl7OzsADz9oGdGRoZW8127dg1A5XfRmzlzJgAgLi5Oq2OKUFJSUr4/VxfMzMyQm5urs/VXh+cNzxtdKDvxpLK588xB9L8XiEhffPEFrl27hgULFsDS0hK//PILgoKC4OHhgXv37pV/MrKyC9eVfcMymazSdQcFBcHOzg47duwAAPzxxx8AgEmTJgH4/x82MzMzg1wur/Blb2+PN998Ex4eHjX+Xmqb9XmfZCYirecruwRHq1atqlxG22OKoOsC0fVB+prgeVM5njeae96JVc9sgTz3iLuelJSUoKioCM7Ozli8eDEWL16Me/fuYcmSJfjpp5/w448/ws/PDwBw4sQJBAUFVXh9XFwcAMDV1bXS9ZuZmWHs2LFYu3YtcnJysG3bNvj5+eHFF1+s8Do3Nzds3ry5wmtVKhXy8/NhaWlZ4++n7NL4mmStjLbzlU3QU6dOYdy4cRWe27hxI9RqNXx8fLQ6pr6VlpZCrVbX6wLhefN8PG80o1AoIJfLIZU+e+nEZx4p+2Z0edG56hw5cgR2dnbYunVr+WPNmzfH3LlzAQCPHj1Cly5dYGpqioMHDz7z+mPHjkEmk2HQoEFVjvH2229DqVTi22+/xfnz5zF58uTy51544QU4OjoiMjISpaWlFV63dOlS2NnZ4fTp0zX+fuqa9Z+0nc/b2xsWFhY4cuRIhccvXbqESZMmISoqSutj6lvZBwh1eZ2q533gSh943jwfzxvNFBUVVV1y/zwqkpaWRgDo9OnTuj0y8xx5eXnUtGlTcnNzo6NHj1Jubi7Fx8fTiBEjCADt27ePiIjmzJlDAOi9996j5ORkunLlCi1cuPCZA1tVHYx68cUXSSaTkaWl5TOnqK1du5YA0JgxYyghIYFSU1NpxYoVZGZmRgMGDCg/06Omapq1e/fu1L59+2deX7bspUuXdJLvs88+IwA0ffp0OnPmDG3YsIG8vLxILpeXnz1S0zEN8WDgtWvXCAAlJCTobIzly5dT27Ztdbb+6vC84XmjC0uXLiVXV9fKnnr2LKz8/HwCQOHh4bpP9hwHDx6kli1bEoDyL3Nzc1qyZEn5MgqFgj744IMKywCgd999t8LnWKr6RXz11VcEgCZMmFBphh9++IHMzc3L12tiYkLvvvturU71q23Wmk4EbedTKpX06aefkkwmK19fixYtKDQ0tMJyNRnTECfCyZMnCQClp6frbIxff/2VrK2tdbb+muB5UxHPm7r75JNPyMfHp7KnjkqInv18urm5OdauXYsJEyY8f9tGx4qKipCUlIRbt27BwcEBHTt2RNOmTZ9Z7v79+zh//jzMzMzg5eVVfuaFNuTn5+PcuXMoKCiAp6dnnW8WpO2s2s5XWFiIpKQk2NjYwM3NrdIDZ9oeUx/Cw8MxdOhQFBQU6Ow6b2FhYRg+fDiePHnyzNlA+sTzRv/56uu8AYDJkycjKyursk/OH6u0QFq1aoW5c+fiww8/1E9CIzVjxowaLTdx4kT07NlTx2meZej59GnTpk2YOnUqiouLdTZGTEwMAgICcPv27eeemdPQGfrfpaHn07dXX30VNjY2z5wEAODYM2dhAUDLli11fvvP+uCVV16p0XItWrTQcZLKGXo+fcrIyND5P+otW7YEAC6Qahj636Wh59O3jIyMKk9WqLRAnJ2dkZ6erstM9cLo0aNFR3guQ8+nT2lpaeWnheqKk5MTTExMkJaWBl9fX52OZcwM/e/S0PPpW3p6epVzp9J7oru4uCAtLU2noRjTJ30UiImJCVq3bs1vvli98ejRI+Tm5lb6YU6gigLhLRBW36SlpVU5CbSJ5w6rT8o2JGq1BeLq6oqHDx/i4cOHukvGmJ6UlJQgIyOjVp9a1pSrq2v5NZIYM3bXr1+HTCZD27ZtK32+0gLp2LEjACA5OVl3yRjTkytXrqC0tLTSi95pW8eOHZGUlKTzcRjTh6SkJLi5uVV5CaBKC6R169awt7fnAmH1QnJyMkxNTcuv2aRLXl5eePDgAbKysnQ+FmO6lpycDC8vryqfr7RAgKeXKOYCYfVBcnIy2rdvr5fbzXbq1AkAeCuE1QvJycnP3XJ/boEkJibqJBRj+lTdJNAmBwcHtGjRgguEGb2CggKkp6eXH9KoTJUF0r17dyQmJpZfd58xY0REOH36NLp166a3Mbt162bwV1hlrDpnzpyBWq1G9+7dq1ymygLx9/dHcXExzp49q5NwjOnDlStXkJ2djYCAAL2N6e/vj+joaL2Nx5gunDhxAs7OzmjdunWVy1RZIO3atUPz5s0RExOjk3CM6UNMTAysrKzQuXNnvY3p5+eHO3fu4ObNm3obkzFti4mJgb+//3OXqbJAAKBnz56IjY3VaijG9CkmJga+vr6Qy+V6G9Pb2xumpqb85osZLbVajVOnTtWtQHr16oUTJ05ApVJpNRxj+hIVFVXtJNA2CwsLdOvWDVFRUXodlzFtOXv2LB4/flztrt/nFsjAgQORnZ2NhIQErYZjTB+uXLmCtLQ0DB48WO9jDxw4EPv379f7uIxpw/79+9GiRYvnnoEFVFMgHh4eaNu2LU8EZpT2798POzs7+Pj46H3swMBAZGRk4NKlS3ofm7G6ioiIwJAhQyCRSJ673HMLBAAGDRrEBcKMUkREBAYOHAgTk0rvWqBT3t7ecHR05LnDjM6jR49w+vTpGm25V1sggYGBOHPmDO7fv6+VcIzpQ0FBAY4fPy5k9xUASKVSDBgwAH/99ZeQ8RnTVEREBACgf//+1S5bbYEMHDgQlpaW2LlzZ92TMaYnYWFhUCqVGDp0qLAMI0aMQFRUFO7cuSMsA2O1FRoain79+sHW1rbaZastEEtLSwwdOhShoaFaCceYPoSGhqJ///5wdHQUliEoKAjW1tbYtWuXsAyM1UZ+fj4iIyMxZsyYGi1fbYEAwNixY3H8+HF+J8WMQl5eHiIjIzF27FihOczNzfnNFzMqe/bsgVKpxGuvvVaj5WtUIIGBgbCyssKOHTvqFI4xfdi9ezfUajWGDx8uOgrGjBmD6OhoZGZmio7CWLVCQ0MxYMAANGnSpEbL16hAzM3N8frrr+O3336rUzjG9OG3337D0KFDYWdnJzoKAgMD0aRJE2zYsEF0FMae6+7du9i/fz/efPPNGr+mRgUCAFOnTsX58+cRHx+vUTjG9OH69euIiorCO++8IzoKAMDMzAwTJ07E2rVroVarRcdhrErr16+HjY0NRo4cWePX1LhAevbsiU6dOiEkJESjcIzpQ0hICFq1aoVBgwaJjlJu2rRpSE9Px5EjR0RHYaxSRIRff/0VEydOhLm5eY1fV+MCAYApU6Zg69atyM/Pr3VAxnSttLQUGzZswJQpUyCTyUTHKde+fXv4+/tjzZo1oqMwVqmjR4/i2rVrtd5yr1WBTJw4EWq1Gr/++mutBmFMH7Zt24bs7GyD2X31d++++y527dqFW7duiY7C2DNWrVqFgICAaq999U+1KhA7OztMnjwZwcHBUCqVtRqIMV37z3/+g7Fjx8LJyUl0lGeMGTMGLVu2xKpVq0RHYayCq1evYt++ffj4449r/dpaFQgAzJkzBxkZGfjzzz9rPRhjunLgwAGcP38ec+bMER2lUnK5HDNnzkRISAhyc3NFx2Gs3IoVK/DCCy/g1VdfrfVrJUREtX3R66+/joyMDJw6darWAzKmC4MGDYJSqcThw4dFR6nS48eP0aZNG3z55ZeYO3eu6DiMISsrC87Ozvj+++/x7rvv1vblx2q9BQIA8+bNw+nTp/lKo8wgxMXF4cCBA5g/f77oKM/VuHFjTJs2DStXrkRhYaHoOIxh+fLlsLW1xdtvv63R6zXaAgGeXufn3r17OHPmTLXXjGdMl/r374/i4mJER0eLjlKt7OxsuLq64ssvv8S8efNEx2EN2N27d/HCCy9g6dKlmD17tiar0GwLBAAWL16Ms2fPIiwsTNNVMFZn0dHROHz4ML766ivRUWrEwcEBs2bNwvLly5GXlyc6DmvAlixZAltbW0ydOlXjdWi8BQI8PRaSmpqKc+fOQSrVuIsY01ivXr1gZmaGQ4cOiY5SY48ePYKLiwvmzJmDhQsXio7DGqCbN2/ipZdeQnBwsCbHPspovgUCPN0KuXTpEtavX1+X1TCmkZ07dyImJgZLliwRHaVW7OzsMHfuXHz33Xd8hWsmxKeffgonJydMmTKlTuup0xYIAMycORPbt29HSkoKGjduXKcwjNWUQqFAx44d0bNnT2zcuFF0nForLi6Gu7s7evfuzW/AmF7FxsYiICAAu3fv1ujU3b85VucCefToEdzc3PDOO+9g2bJldVkVYzX2zTffYMmSJbh8+TLatGkjOo5GQkNDMW7cOJw8eRI+Pj6i47AGQK1Wo0ePHmjUqJE2Tnmve4EAwA8//IB58+YhOTkZbm5udV0dY8+VmZkJd3d3zJ07FwsWLBAdR2NEhN69e0OpVCI6OpqPIzKdW7duHd59912cO3eu1pctqYR2CqS0tBTe3t5o0qQJDh8+zKf1Mp167bXXcPHiRSQlJcHCwkJ0nDpJTEyEt7c3vv/+e7z//vui47B6LCsrCx06dMDEiRMRHBysjVXW7SB6GblcjpCQEBw/fhzr1q3TxioZq9SOHTsQFhaG1atXG315AECnTp3wySef4LPPPkNGRoboOKwemz17NqytrfH1119rbZ1a2QIp8/HHH2PdunW4ePEiWrVqpa3VMgbg6aVAPDw8MHjwYKxdu1Z0HK1RKBTo0qULXFxc8Ndff4mOw+qh8PBwDB06FGFhYRg2bJi2VqudXVhlioqK4OnpCQ8PD+zZs4d3ZTGtevvtt3HgwAFcunTJIG5Xq03Hjx9Hnz59sH79erz11lui47B65OHDh/Dy8kKfPn2wefNmba5aO7uwylhaWmLjxo0IDw/HL7/8os1VswZux44d2LRpE9asWVPvygMAXn75ZXz44Yd4//33kZqaKjoOq0dmzJgBADq5lYBWt0DKLFiwACtWrMDp06fh6emp7dWzBub27dvo1KkTxo8fjx9//FF0HJ1RKBTw9fWFqakpYmJiIJfLRUdiRm7t2rWYPn06Dh48iL59+2p79drdhVVGqVQiICAAJSUliIuLg5mZmbaHYA2EUqlEv379kJOTgzNnztSLA+fPc/HiRXh7e2PevHn417/+JToOM2IpKSno1q0bZsyYgW+//VYXQ2h3F1YZExMTbN68GTdu3MCsWbN0MQRrID7//HOcOXMGW7ZsqfflAQAeHh5YsWIFvvrqK0RERIiOw4xUYWEhRo0aBXd3d91eaJR0KCwsjCQSCYWEhOhyGFZP7dq1iyQSCf3666+io+jdpEmTyM7Ojq5duyY6CjNCY8eOpSZNmtCNGzd0OcxRnezC+rsvvvgCK1euxPHjx/lyDazGrl69Ch8fH0yYMAH//e9/RcfRu+LiYvj7+0OpVCIuLg6WlpaiIzEjsXLlSsybNw/h4eEYNGiQLofSzTGQv1OpVBgyZAguXbqEkydP8udDWLVycnLQs2dPODg44NixYzA1NRUdSYgbN26ge/fuGDhwILZu3cqnxbNqRUZGIigoCF999RU+/fRTXQ+n+wIBgLy8PPj7+wN4egMgvmovq0pJSQkGDx6M1NRUfsMBICoqCoMGDcKcOXPwzTffiI7DDNjFixcREBCAwYMHY8uWLfp4w6Gbg+j/ZGNjg7179+LBgwd44403oFQq9TEsMzJEhP/7v/9DQkICwsPDG3x5AEDv3r3x22+/YdmyZVi9erXoOMxA3b17F0OGDIGXlxfWr1+vt61VvV3+09nZGWFhYYiKisL7778PPWz4MCMzf/58hIaGYteuXfz5ob954403sGDBAnzwwQcIDw8XHYcZmNzcXAwZMgRWVlbYvXu3fj82octD9JXZs2cPyeVymjNnjr6HZgbs66+/JqlUSps3bxYdxSCp1WqaMmUKWVhY0JEjR0THYQaioKCA/Pz8qHXr1pSWlqbv4Y/qvUCIiHbs2EEymYwWLVokYnhmYH788UeSSCS0evVq0VEMmlKppDfeeIMsLS3p+PHjouMwwRQKBQ0ePJgcHR3p4sWLIiKIKRAiorVr15JEIqGlS5eKisAMwJo1a0gikdB3330nOopRKCkpoWHDhpGtrS3Fx8eLjsMEKS4upmHDhpGdnR2dO3dOVAxxBUL0/9958pZIwxQcHEwSiYQWL14sOopRefLkCQ0aNIgaN25M0dHRouMwPSssLCz//cfFxYmMIrZAiIg2btxIJiYm9P7775NarRYdh+nJsmXLeMujDhQKBY0cOZIsLS3pwIEDouMwPcnPz6e+ffuSnZ0dnTp1SnQc8QVCRLRlyxYyMTGh6dOnk1KpFB2H6ZBaraa5c+eSVCrlYx51VFpaSuPHjydzc3PavXu36DhMx+7fv0/e3t7UsmVLunDhgug4RIZSIEREu3fvJgsLCwoKCqL8/HzRcZgOPHnyhMaNG0empqZ8tpWWqFQqmj59OslkMvrhhx9Ex2E6cuXKFWrXrh25uroa0vXRDKdAiIhOnTpFzZo1Iy8vL7p165boOEyLcnJy6OWXX6ZGjRrR/v37Rcepd4KDg0kqldLs2bN5K76eiYmJIUdHR/L19aWsrCzRcf7uqN4+SFgTPj4+iI2NhUKhQEBAAM6ePSs6EtOCy5cvo0ePHrh58ybi4uIwePBg0ZHqnQ8++AC///471qxZg5EjRyIvL090JKYF69evR9++ffHyyy/j6NGjaNq0qehIFRhUgQCAq6srYmNj4ebmBn9/f6xfv150JFYHO3bsgK+vLxwcHHDy5El4eHiIjlRvjRs3DgcPHsSpU6fg4+ODS5cuiY7ENFRSUoIZM2ZgypQp+PDDDxEaGmqY98MRvQ1UFaVSSYsWLSKpVErTpk0jhUIhOhKrBaVSSfPnzyeJRMK/Pz3LzMwkPz8/sra2pj/++EN0HFZLt2/fpp49e5K1tTWFhoaKjvM8hnUMpDI7duygRo0aUffu3enq1aui47AaSE9Pp169epGFhQVt2LBBdJwGSaFQ0Pvvv08SiYRmzpxJRUVFoiOxGti7dy81bdqU2rdvT5cuXRIdpzqGdQykMqNGjcKZM2dAROjatSvWrVsnOhJ7jm3btqFz587IycnByZMn8dZbb4mO1CCZmprip59+wpYtW7B582Z4e3sjKSlJdCxWhSdPnmDmzJl49dVXMXjwYJw+fRru7u6iY1VPdIXVlEKhoPnz55NUKqWRI0fS/fv3RUdif/Po0SN66623SCKR0Pvvv8/veA1I2RahmZkZrVy5ks/SMjAJCQnk4eFBtra2tHXrVtFxasPwd2H905EjR6hNmzZkb2/Pu0cMxPbt26lFixbUrFkz2rt3r+g4rBJKpZK+/vprMjU1JV9fX0pKShIdqcErLCykuXPnkomJCfXu3ZvS09NFR6ot4ysQIqK8vDyaNWsWSaVSGjBggK5vHM+qcPv2bRo+fDhJJBKaMmUKPXz4UHQkVo0LFy5Qjx49SC6X05dffklPnjwRHalBOnToELVr144aN25Mv/zyi7Fexsk4C6RMbGwseXh4kIWFBc2fP5/y8vJER2oQFAoFBQcHk42NDbm6uvK1mIyMWq2m//3vf9SoUSNycnLiLXk9ysjIoIkTJ5JEIqGgoCBj/8C0cRcI0dN/zL777jtq3LgxtWrVijZt2mSsbW4UduzYQS4uLmRlZUWLFy/mYx1G7NatW/TGG2+QRCKhvn37UmJiouhI9VZBQQF98cUXZGFhQS+++CKFhYWJjqQNxl8gZbKysmjq1KkklUrJ29ubL5ehZceOHaOAgACSSCQ0YcIEysjIEB2JaUlMTAx5e3uTTCajSZMm8S5hLVIoFPTTTz9Ry5YtqXHjxrRixYr69Jmo+lMgZc6dO0dDhw4lAOTv78+3/6yj2NhY6tevHwGgvn370smTJ0VHYjqgUqlo06ZN1K5dO5LL5TR9+nR+k1AHJSUlFBISQm3atCEzMzOaPXt2fTxztP4VSJm4uDjq378/AaCXX36ZwsLCSKVSiY5lNA4cOEADBw4kABQQEEBHjx4VHYnpQdk/fG3btiUzMzOaNm0aXb58WXQso1FQUEA//vgjubq6kqmpaX0v4vpbIGWioqJoyJAhJJFIqH379rRmzRo+86QKJSUltGnTJurUqRMBoH79+lFkZKToWEwAhUJBv/zyC7m5uZFUKqVXX32VoqKiRMcyWPfu3aMvv/yS7O3tycLCgt57772GsCuw/hdImZSUFJo9ezZZWFiQra0tTZs2jc6fPy86lkFISUmhRYsWkZOTE0mlUgoKCuJdVYyInu7aCgsLK9+ad3d3p2XLltGDBw9ERxNOpVLRwYMHaeLEiWRhYUGOjo40f/58unPnjuho+tJwCqTM3bt36ZtvvqF27doRAPLz86O1a9dSTk6O6Gh69fjxY9q4cSP16dOHJBIJOTk50aJFi4z9tEKmQ6dPn6Z33nmHrK2tydzcnCZMmEAHDhyg0tJS0dH06tq1a7R48WJycXEpP9a6fv36hnhGYsMrkDJqtZoOHTpEY8eOJXNzczI1NaUhQ4bQ+vXr6dGjR6Lj6UR+fj5t2bKFXnvttfLvecSIEfTXX3/x5S1YjeXl5dGaNWvI19eXAJCDgwNNnz6dDh8+XG//jtLS0ujbb7+lbt26EQBq2rQpzZkzxxgueKhLRyVERKKuw2UoioqKcPjwYWzfvh07d+6EQqFA586dERQUhGHDhqFr166QSCSiY2rkxo0bOHToEA4dOoT9+/fjyZMn6NGjB0aPHo3x48fD0dFRdERmxG7evIndu3dj+/btiImJgb29Pfr27Yv+/fsjKCgILVu2FB1RIyqVCufPn8fevXuxb98+nD17Fra2tggKCsLo0aMxePBgyOVy0TFFO8YF8g+5ubn466+/sH//fhw4cAAPHjyAk5MT+vTpA39/f/j7+6NDhw6QSg3zQsZXrlxBTEwMoqOjERUVhbS0NNjZ2WHAgAEIDAzEsGHDYG9vLzomq4dSUlIQFhaGiIgInDhxAkqlEl27dkVAQAACAgLg7++P5s2bi45ZKYVCgfj4eERHRyMmJgZRUVHIy8uDm5sbAgMDMWTIEPTt25dLoyIukOdRq9WIj49HZGQkTpw4gZMnTyI/Px92dnbw9vZGp06d4OnpiY4dO6JDhw4wMzPTW7bS0lJcvnwZFy5cQHJyMpKSknD69GlkZ2fD0tISPj4+ePnllzFw4ED06NEDMplMb9kYKygowJEjR3Dw4EFER0cjOTkZKpUK7dq1Q7du3eDl5QVPT094enrC2dlZr1v4ubm5FeZNUlISEhISoFAo0KJFC/j7+6NPnz4YPHgw2rVrp7dcRogLpDZUKhWSkpIQHR2N+Ph4JCcn49KlS1AoFDAxMYGTkxOcnZ3h4uICFxcXtGnTBvb29uVfDg4OsLOzq3acx48fIzs7G9nZ2cjJyUFOTg4yMjKQlpaG9PR0pKWl4datWygtLYVcLoe7uzs6duyI7t27w9/fH126dOF3Ssyg5OfnIy4uDrGxsTh//jySkpKQnp4OIoKVlVWFeePi4oLmzZvDwcEBjo6O5fPH0tLyuWMolUo8fPiwfM7k5OQgKysLN2/eLJ83aWlpuHfvHgDA1tYWHTt2hJeXF3r06AF/f3+4urrq48dRX3CB1JVSqURKSgouXLiA69evV/hH/vbt2yguLq70dWZmZhUmxJMn6rxY3wAAANtJREFUT567bKtWrSpMMldXV3h4eMDd3Z3Lghml/Px8XLhwAZcuXaowb9LS0nD//n2oVKpKX2dtbV3hb/7x48dQq9WVLmtjY4M2bdpUKCc3Nzd07NgRbdu21cn31YBwgehaYWFhhXdEubm5ICIoFAoUFRWVL2dhYQFzc3MAgJ2dHezs7ODg4AB7e3tYW1uLis+YMH/fmsjNzUV+fj6Ap7vHSktLy5ezsbGBTCaDqakpbG1tK2z1m5qaiorfEHCBMMYY08gxwzyViDHGmMHjAmGMMaYRLhDGGGMa+X/8SCbZBnK+6AAAAABJRU5ErkJggg==", "text/plain": [ "" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Dispatch one task per grid cell\n", "tasks = [solve_one_cell(i,temperatures,pressures,concentrations, sim_length, time_step_length) for i in range(num_grid_cells)]\n", "# visualize the Dask graph\n", "results = compute(*tasks)\n", "dask.visualize(*tasks)" ] }, { "cell_type": "markdown", "id": "36a5e037", "metadata": {}, "source": [ "## 6. Visualizing Results" ] }, { "cell_type": "markdown", "id": "6fc048a9", "metadata": {}, "source": [ "As in the [Multiple Grid Cells Tutorial](1.%20multiple_grid_cells.ipynb), the results can now be visualized over time and are consistent with those obtained without using Dask." ] }, { "cell_type": "code", "execution_count": null, "id": "c3924d37", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
CONC.A.mol m-3CONC.B.mol m-3CONC.C.mol m-3time.s
05.05.05.00.0
14.9764285283988024.9999443510938755.02362712050732351.0
24.9296184294338824.9995023041843545.0708792663817592.0
34.8602275718984974.9980279069098585.1417445211916413.0
44.7692234619102714.9945903436850475.2361861944046814.0
54.6578607957216314.9880175673021545.35412163697621155.0
64.5276526790263534.97695109818678555.495396222786866.0
74.3803364358368524.9599093402835175.659754223879637.0
84.2178350862288514.9353563884048065.8468085253663428.0
94.0422156851869664.9017730904095336.0560112244034979.0
103.8556457804476244.8577270881134156.2866271314389610.0
113.66034926430367374.8019386911424866.53771204455383911.0
123.4585628637877374.7333397257587816.80809741045347912.0
133.2524946105121994.6511224891647827.09638290032301513.0
143.04428469256828474.5547785987662727.40093670866544214.0
152.83597049847706154.4441240544359927.71990544708694715.0
162.62945606934058554.31931126308868858.05123266757072616.0
172.4264865865646414.1808277957094978.39268561772585817.0
182.2286282621407194.0294824392646088.74188929859467318.0
192.03725378531082153.8663796994868389.09636651520234319.0
201.85353329213323463.69288436850851959.45358233935824420.0
211.67843065278932383.51057812083000849.81099122638066121.0
221.51270472114052333.32121033114357910.16608494771589122.0
231.3569150663568693.126645414679084310.5164395189640423.0
241.21143161017223872.928808978839022410.85975941098873324.0
251.07644752673447042.72963495420528711.1939175190602425.0
260.95199472492546462.531015659036607511.5169896160379226.0
270.8379612239472762.334756463488097711.8272823125646227.0
280.73410974933249822.142536379648243712.12335387101925828.0
290.64009691491605791.955875533575901512.4040275515080429.0
300.55549241268273111.776110097675924812.66839748964134730.0
310.47979770243132511.604374895961627512.91582740160704831.0
320.412463772441981241.441593558157363813.14594266940065632.0
330.352907626509318231.288475804803737213.35861656868694433.0
340.300527237854313571.145521204229248413.5539515579164434.0
350.25471479307362371.013028559119263413.73225664780711835.0
360.214868126529732470.891109957275688613.89402191619458536.0
370.180400315172176220.779708456392741814.03989122843509237.0
380.150747464109499660.67861836174684314.17063417414366538.0
390.125374763361379340.587507091837754314.28711814480087839.0
400.10378093573601950.505937701908446314.39028136235554540.0
410.085501224840030990.433391239754704214.48110753540527541.0
420.070109091404200130.3692882329577898414.56060267563801842.0
430.05721679629770990.313008742644458414.62977446105783543.0
440.046475050938347060.263910557923730614.68961439113792844.0
450.0375719115609324740.221345240239835214.74108284819923445.0
460.0302310843114090150.1846718523385692314.78509706335001946.0
470.0242097947049658630.1532683181356193414.82252188715941347.0
480.019296358864445940.1265404546971858314.85416318643836748.0
490.0153075762630535250.1039287943288515814.88076362940809449.0
500.0120860454079992960.0849133731298062614.90300058146218950.0
510.009497485829414240.0690167029974623214.92148581117311951.0
520.0074281325220300550.0558051684127350614.93676669906523152.0
530.0057822531007825590.044889099385610314.94932864751360553.0
540.004479823697155770.0359217700056352514.95959840629720554.0
550.0034543872258657380.02859756057005968814.9679480522040755.0
560.0026511071604678220.02264950267789791714.97469939016162956.0
570.00202502134651289050.01784640325737680814.98012857539610357.0
580.00153949355437173590.01398971727457049214.98447078917104858.0
590.00116485528129546110.01091031159362649414.98792483312506959.0
600.0008772265708207770.00846523554041505114.99065753788875560.0
\n", "
" ], "text/plain": [ " CONC.A.mol m-3 CONC.B.mol m-3 CONC.C.mol m-3 time.s\n", "0 5.0 5.0 5.0 0.0\n", "1 4.976428528398802 4.999944351093875 5.0236271205073235 1.0\n", "2 4.929618429433882 4.999502304184354 5.070879266381759 2.0\n", "3 4.860227571898497 4.998027906909858 5.141744521191641 3.0\n", "4 4.769223461910271 4.994590343685047 5.236186194404681 4.0\n", "5 4.657860795721631 4.988017567302154 5.3541216369762115 5.0\n", "6 4.527652679026353 4.9769510981867855 5.49539622278686 6.0\n", "7 4.380336435836852 4.959909340283517 5.65975422387963 7.0\n", "8 4.217835086228851 4.935356388404806 5.846808525366342 8.0\n", "9 4.042215685186966 4.901773090409533 6.056011224403497 9.0\n", "10 3.855645780447624 4.857727088113415 6.28662713143896 10.0\n", "11 3.6603492643036737 4.801938691142486 6.537712044553839 11.0\n", "12 3.458562863787737 4.733339725758781 6.808097410453479 12.0\n", "13 3.252494610512199 4.651122489164782 7.096382900323015 13.0\n", "14 3.0442846925682847 4.554778598766272 7.400936708665442 14.0\n", "15 2.8359704984770615 4.444124054435992 7.719905447086947 15.0\n", "16 2.6294560693405855 4.3193112630886885 8.051232667570726 16.0\n", "17 2.426486586564641 4.180827795709497 8.392685617725858 17.0\n", "18 2.228628262140719 4.029482439264608 8.741889298594673 18.0\n", "19 2.0372537853108215 3.866379699486838 9.096366515202343 19.0\n", "20 1.8535332921332346 3.6928843685085195 9.453582339358244 20.0\n", "21 1.6784306527893238 3.5105781208300084 9.810991226380661 21.0\n", "22 1.5127047211405233 3.321210331143579 10.166084947715891 22.0\n", "23 1.356915066356869 3.1266454146790843 10.51643951896404 23.0\n", "24 1.2114316101722387 2.9288089788390224 10.859759410988733 24.0\n", "25 1.0764475267344704 2.729634954205287 11.19391751906024 25.0\n", "26 0.9519947249254646 2.5310156590366075 11.51698961603792 26.0\n", "27 0.837961223947276 2.3347564634880977 11.82728231256462 27.0\n", "28 0.7341097493324982 2.1425363796482437 12.123353871019258 28.0\n", "29 0.6400969149160579 1.9558755335759015 12.40402755150804 29.0\n", "30 0.5554924126827311 1.7761100976759248 12.668397489641347 30.0\n", "31 0.4797977024313251 1.6043748959616275 12.915827401607048 31.0\n", "32 0.41246377244198124 1.4415935581573638 13.145942669400656 32.0\n", "33 0.35290762650931823 1.2884758048037372 13.358616568686944 33.0\n", "34 0.30052723785431357 1.1455212042292484 13.55395155791644 34.0\n", "35 0.2547147930736237 1.0130285591192634 13.732256647807118 35.0\n", "36 0.21486812652973247 0.8911099572756886 13.894021916194585 36.0\n", "37 0.18040031517217622 0.7797084563927418 14.039891228435092 37.0\n", "38 0.15074746410949966 0.678618361746843 14.170634174143665 38.0\n", "39 0.12537476336137934 0.5875070918377543 14.287118144800878 39.0\n", "40 0.1037809357360195 0.5059377019084463 14.390281362355545 40.0\n", "41 0.08550122484003099 0.4333912397547042 14.481107535405275 41.0\n", "42 0.07010909140420013 0.36928823295778984 14.560602675638018 42.0\n", "43 0.0572167962977099 0.3130087426444584 14.629774461057835 43.0\n", "44 0.04647505093834706 0.2639105579237306 14.689614391137928 44.0\n", "45 0.037571911560932474 0.2213452402398352 14.741082848199234 45.0\n", "46 0.030231084311409015 0.18467185233856923 14.785097063350019 46.0\n", "47 0.024209794704965863 0.15326831813561934 14.822521887159413 47.0\n", "48 0.01929635886444594 0.12654045469718583 14.854163186438367 48.0\n", "49 0.015307576263053525 0.10392879432885158 14.880763629408094 49.0\n", "50 0.012086045407999296 0.08491337312980626 14.903000581462189 50.0\n", "51 0.00949748582941424 0.06901670299746232 14.921485811173119 51.0\n", "52 0.007428132522030055 0.05580516841273506 14.936766699065231 52.0\n", "53 0.005782253100782559 0.0448890993856103 14.949328647513605 53.0\n", "54 0.00447982369715577 0.03592177000563525 14.959598406297205 54.0\n", "55 0.003454387225865738 0.028597560570059688 14.96794805220407 55.0\n", "56 0.002651107160467822 0.022649502677897917 14.974699390161629 56.0\n", "57 0.0020250213465128905 0.017846403257376808 14.980128575396103 57.0\n", "58 0.0015394935543717359 0.013989717274570492 14.984470789171048 58.0\n", "59 0.0011648552812954611 0.010910311593626494 14.987924833125069 59.0\n", "60 0.000877226570820777 0.008465235540415051 14.990657537888755 60.0" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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6vGurq6afv36acLCwu563XvZvHmzuiZr167VNGjQQOPo6Khp37695ubNm5rVq1dratSooV63f//+moSEBE1hPpP//fdfnveb6ufSVKy/vF7zyOJHNHV+rKNp8HMDzZxDczTJ6cmGLhYRFeD7OzvWyGQj3+cy4ZUhONk65asq+/bt21i7di2mTZummipy09VqrF+/HpGRkRg9evRdj5FmIKklWLx4MZ555hn9ealpOXfuHMaOHYtVq1YV+r1zy8zMxJIlS/D888+jXLlyd91fqlSp+/6bL1y4gDVr1qj3lttPPfUULl68qP4NUqMjzWevvvqqarJp3ry5er/evXur15X709PTVW2R/Fu3bNmCgjYLSW2Ks7Ozqt2STZrTfvvtN8THx6Nv376YM2cOxowZk6/XS01NxbfffqtWdK1fv36BykIP3xdmxt4ZWHVR+9mu7lEd0x+djmoe1QxdNCJ6CAwy2UiIaf5bc4O8997n9uZreKc0R0jgkj4X9yOBRNSsWTPP++X5usdkN2PGDNSrVw/bt2/Ho48+Wqj3zi0iIgJRUVEFfp6OBJMffvgBrq6uqFWrFtq3b4+zZ89i9erVsLa2RvXq1fHxxx+r5jMJMtJX5/jx47h06ZLqvyN+/vln1K5dG/v371fNWvklzWAS8MRrr72GcePGqTAlzURCQpW874OCjATDZ599FomJifDz88OGDRvg7e1dqOtBBbfr+i5M2DkB4YnhsLayVsOph9QfwrWRiMwAO/uamIJ2ii3o4yUovPTSS6pW5mFf62GfpxMQEKBCjI6vr68qp4SY7OfCw8PV7dOnT6sAowsxQh4vNUZyX0FIqMv+HlIzowsxud/3119/VbVAuk3CoI6ELxkhJbVH3bp1UzU7uudR8UlMS8S0PdMweMNgFWL83fzxc/ef8VajtxhiiMwEa2RyNe9IzYih3js/goKCVBPUvTrV6kizi5Av7latWt11v5yXL/e8TJkyRT1fhicX5r1zkw6tEiIK+jwdO7ucXzhShrzOSc1NUcv+Pg963169eqkaIZ3y5cvrb0tTXNWqVdXWokULdS2///57VcNDxeP4reMYt2McQmK1I/H61+iPkY1GcmI7IjPDGplcX0ryS84QW36Henp6eqJr166YN28eEhIS8hwdJGRUjDz2888/v+sxK1euxPnz59G/f/8830NqMoYNG4b3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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Extract the array from the tuple\n", "time_array = results[0]['times']\n", "data_array = results[0]['concentrations']\n", "\n", "# Flatten the single-element lists in each dictionary\n", "flat_dicts = [{k: v[0] for k, v in d.items()} for d in data_array]\n", "\n", "# Convert to DataFrame\n", "df = pd.DataFrame(flat_dicts)\n", "df['time.s'] = data_array = results[0]['times']\n", "\n", "#rename columns\n", "df.rename(columns={'A': 'CONC.A.mol m-3','B':'CONC.B.mol m-3','C':'CONC.C.mol m-3'}, inplace=True)\n", "\n", "# Show the result\n", "# Show all rows\n", "pd.set_option('display.max_rows', None)\n", "display(df)\n", "\n", "#plot\n", "df.plot(x='time.s', y=['CONC.A.mol m-3', 'CONC.B.mol m-3', 'CONC.C.mol m-3'], title='Concentration over time', ylabel='Concentration (mol m-3)', xlabel='Time (s)')\n", "plt.show()" ] } ], "metadata": { "kernelspec": { "display_name": "mb-dask", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.13" } }, "nbformat": 4, "nbformat_minor": 5 }